import { get } from '@/utils/request';

/**
 * 监控统计DTO
 */
export interface MonitorStatsDto {
  /**
   * 今日总请求次数
   */
  totalRequestsToday?: number;
  
  /**
   * 智能体总数
   */
  totalAgents?: number;
  
  /**
   * 总用户数
   */
  totalUsers?: number;
  
  /**
   * API调用次数
   */
  totalApiCalls?: number;
  
  /**
   * 对话总数
   */
  totalConversations?: number;
  
  /**
   * 警告数
   */
  totalAlerts?: number;
  
  /**
   * 错误数
   */
  totalErrors?: number;
  
  /**
   * 按时间段统计的请求数据
   */
  timeStats?: TimeStats[];
}

/**
 * 时间段统计数据
 */
export interface TimeStats {
  /**
   * 时间段
   */
  timeSlot: string;
  /**
   * 成功次数
   */
  successCount: number;
  /**
   * 失败次数
   */
  failureCount: number;
  /**
   * 告警次数
   */
  alertCount: number;
}

/**
 * 系统资源使用情况DTO
 */
export interface SystemResourcesDto {
  /**
   * CPU使用率
   */
  cpuUsage: number;
  
  /**
   * 内存使用率
   */
  memoryUsage: number;
  
  /**
   * 已使用存储空间(GB)
   */
  usedStorage: number;
  
  /**
   * 总存储空间(GB)
   */
  totalStorage: number;
  
  /**
   * 系统运行时间(分钟)
   */
  uptimeMinutes: number;

  /**
   * 格式化后的系统运行时间
   */
  formattedUptime: string;
}

/**
 * 活动日志DTO
 */
export interface ActivityLogDto {
  /**
   * 日志ID
   */
  id?: string;
  
  /**
   * 活动类型
   */
  type?: string;
  
  /**
   * 活动描述
   */
  requestContent?: string;
  
  /**
   * 用户名
   */
  username?: string;
  
  /**
   * 活动时间
   */
  activityTime?: string;
  
  /**
   * 活动时间（相对表示）
   */
  timeAgo?: string;
}

/**
 * 智能体使用统计DTO
 */
export interface AgentUsageStatsDto {
  /**
   * 智能体ID
   */
  agentId?: number;
  
  /**
   * 智能体名称
   */
  agentName?: string;
  
  /**
   * 使用次数
   */
  usageCount?: number;
}

/**
 * 获取今日总请求次数
 */
export const getTodayTotalRequests = async (): Promise<number> => {
  const res = await get<{data: number}>('/engine/starhub/monitor/today-requests');
  return res.data;
};

/**
 * 获取智能体总数
 */
export const getTotalAgents = async (): Promise<number> => {
  const res = await get<{data: number}>('/engine/starhub/monitor/total-agents');
  return res.data;
};

/**
 * 获取按时间段统计的请求数据
 * @param type 统计类型: day-按日统计，week-按周统计，month-按月统计
 * @param time 统计时间
 */
export const getRequestStatsByTime = async (
  type: 'day' | 'week' | 'month' = 'day',
  time?: string
): Promise<MonitorStatsDto> => {
  const res = await get<{data: MonitorStatsDto}>('/engine/starhub/monitor/time-stats', { type, time });
  return res.data;
};

/**
 * 获取仪表盘所有统计数据
 */
export const getDashboardStats = async (): Promise<MonitorStatsDto> => {
  const res = await get<{data: MonitorStatsDto}>('/engine/starhub/monitor/dashboard');
  return res.data;
};

/**
 * 根据自定义时间范围获取请求统计数据
 * @param startTime 开始时间
 * @param endTime 结束时间
 * @param interval 时间间隔类型: hour-按小时，day-按天，month-按月
 */
export const getRequestStatsByCustomTimeRange = async (
  startTime: string,
  endTime: string,
  interval: 'hour' | 'day' | 'month' = 'day'
): Promise<MonitorStatsDto> => {
  const res = await get<{data: MonitorStatsDto}>('/engine/starhub/monitor/custom-time-stats', {
    startTime,
    endTime,
    interval
  });
  return res.data;
};

/**
 * 获取系统资源使用情况
 */
export const getSystemResources = async (): Promise<SystemResourcesDto> => {
  const res = await get<{data: SystemResourcesDto}>('/engine/starhub/monitor/system-resources');
  return res.data;
};

/**
 * 获取系统活动日志
 * @param limit 限制返回记录数
 */
export const getActivityLogs = async (limit: number = 20): Promise<ActivityLogDto[]> => {
  const res = await get<{data: ActivityLogDto[]}>('/engine/starhub/monitor/activity-logs', { limit });
  return res.data;
};

/**
 * 获取智能体使用统计数据
 */
export const getAgentUsageStats = async (): Promise<AgentUsageStatsDto[]> => {
  const res = await get<{data: AgentUsageStatsDto[]}>('/engine/starhub/monitor/agent-usage-stats');
  return res.data;
}; 